2018/09/14

Recent entries from same category

  1. Go 言語プログラミングエッセンスという本を書きました。
  2. errors.Join が入った。
  3. unsafe.StringData、unsafe.String、unsafe.SliceData が入った。
  4. Re: Go言語で画像ファイルか確認してみる
  5. net/url に JoinPath が入った。

今日 Reddit で見付けた面白ネタ。

簡単そうだなと思ったので作ってみた。

とは言っても家にボタンらしきデバイスが無いので、カメラの自動シャッターボタンで代用。ダイソーで300円くらいで売ってます。

Linux で User Input (入力キャラクタデバイス) は /dev/input/ 配下のデバイスファイルを介してやり取りされます。以前この uinput を簡単に扱えるデーモンを作ったのでそちらを使います。

GitHub - mattn/uinputd: uinput launcher

uinputd uinput daemon Usage Run uinputd with specifying configuration file like below. -1 uinputd A f...

https://github.com/mattn/uinputd

まずは空の ~/.config/uinputd というファイルを作り uinputd -v で起動します。するとデバイス名と物理デバイス名が表示されるので ~/.config/uinputd を YAML で以下の様に設定します。

- device: XX:XX:XX:XX:XX:XX
  release: echo 押した

再度 uinputd を起動し、デバイスとなるボタンを押すと「押した」と表示されると思います。ここまで出来たらあとは、フォアグラウンドウィンドウで動いている gvim に対して if err != nil... を送りつけるコマンドを作ります。

#!/bin/bash

PROC=$(readlink /proc/$(xdotool getwindowfocus getwindowpid)/exe)
NAME=$(basename $PROC)

if [[ $NAME = "vim"* ]] || [[ $NAME = "gvim"* ]]; then
  $PROC --servername GVIM --remote-send "if err != nil {<nl>}<esc>O"
fi

これを ~/bin/vim-iferr というファイルに保存して実行権限を付け、先程の ~/.config/uinputd に設定します。

- device: XX:XX:XX:XX:XX:XX
  release: /home/mattn/bin/vim-iferr

簡単ですね。

追記

AB Shutter 3 のデフォルトのキーマッピングが邪魔だという方は以下のファイルを作ればok

/etc/udev/hwdb.d/90-sbutton.hwdb

evdev:input:b0005v248Ap8266*
 KEYBOARD_KEY_c00e9=unknown
 KEYBOARD_KEY_70028=unknown

ベンダーID(v)や、プロダクトID(p)はご自分で調べて下さい。

Posted at by